<?php


namespace app\text\controller;


use think\Db;

class Search
{
    public function Search(){
        //比较查询
//        $result = Db::name('user')->where('id',233)->select();
//        $result = Db::name('user')->where('id','=',233)->select();
//        $result = Db::name('user')->where('id','<>',233)->select();
//        return Db::getLastSql();

        //区间查询
        //1.使用like表达式进行模糊查询
//        $result = \db('user')->where('email','like','xiao%')->select();

        //2.like表达式还可以支持数组传递进行模糊查询
//        $result = db('user')->where('email','like',['xiao%','wu%'],'or')->select();
//        return Db::getLastSql();
//        return json($result);

        //3.like表达式具有两个快捷方式wherelike() whereNolike()
//        $result = \db('user')->whereLike('email','xiao%')->select();
//        $result = \db('user')->whereNotLike('email','xiao%')->select();
//        return Db::getLastSql();

        //4.between表达式具有两个快捷方式whereBetween() whereNotBetween()
//        $result = \db('user')->where('id','between','19,25')->select();
//        $result = \db('user')->where('id','between',[19,25])->select();
//        $result = \db('user')->whereBetween('id',[20,25])->select();
//        $result = \db('user')->whereNotBetween('id',[20,25])->select();

        //5.in表达式具有两个快捷方式 whereIn() whereNotIn()
//        $result = \db('user')->where('id','in','19,25')->select();
//        $result = \db('user')->whereIn('id','19,25')->select();
//        $result = \db('user')->whereNotIn('id','19,25')->select();
//        return Db::getLastSql();
//        return json($result);

        //6whereNull() whereNotNull()
//        $result = \db('user')->where('uid','Null')->select();
//        $result = \db('user')->where('uid','NotNull')->select();
//        $result = \db('user')->whereNull('uid')->select();
//        $result = \db('user')->whereNotNull('uid')->select();
//        return Db::getLastSql();

        //7 使用exp可以自定义字段后的sql语句
//        $result = \db('user')->where('id','exp','IN(19,21,25)')->select();
//        $result = \db('user')->whereExp('id','IN(19,21,25)')->select();
//        return Db::getLastSql();
//        return json($result);


        //时间查询
        //1
        //$result = \db('user')->where('create_time','> time','2018-1-1')->select();
        //2
        //$result = Db::name('user')->where('create_time','between time',['2018-1-1','2019-9-21'])->select();
        //Db::name('user')->where('create_time', 'not between time', ['2018-1-1', '2019-12-31'])->select();
        //3
        //$result = \db('user')->whereTime('create_time','>','2018-1-1')->select();
        //4  whereBetween whereNotBetween
        //$result = \db('user')->whereBetween('create_time',['2018-1-1 12:12:12','2019-1-1'])->select();
        //5whereBetweenTime
//        $result = \db('user')->whereBetweenTime('create_time','2018-1-1 12:12:12','2019-1-1')->select();

        //6  d 今天 yesterday 昨天  w 本周  last week 上周  m 本月 last month 上月 y 年 last year 上年
//        $result = \db('user')->whereTime('create_time','d')->select();


        //7其他查询
        //查询指定时间的数据，比如两小时内的
//       $result = \db('user')->whereTime('create_time','-2 hour')->select();
        //查询两个时间字段时间有效期的数据，比如会员开始到结束的期间
//        $result = \db('user')->whereNotBetweenTimeField('create_time','create_time')->select();
//        return Db::getLastSql();

        //聚合查询
        //1 使用count()方法  ，可以求出所查询数据数量
//        $result = \db('user')->count();
//        $result = \db('user')->count('uid');
//        echo $result;
//        return '<br>'.Db::getLastSql();

        //2.使用max() min() 求出所查询数据的最大值 最小值
//          $result  = \db('user')->max('price',false);
//          echo $result;
//          return '<br>'.Db::getLastSql();

         //3 使用 avg()  sum()  求出平均值 和总和
//         $result =  \db('user')->avg('price');
//        $result =  \db('user')->sum('price');
//         echo $result;
//         return '<br>'.Db::getLastSql();

        //子查询
        //1 使用fetchSql()方法  可以设置不执行SQL 而返回SQL  默认TRUE
        //$result = \db('user')->fetchSql(true)->select();

        //2 使用buildSql()方法  也是返回SQL 但不需要执行select() ，且有括号
//        $result = \db('user')->buildSql();
//        return $result;

        //3
//        $subQuery = \db('two')->field('uid')->where('gender','男')->buildSql();
//       $result = \db('one')->where('id','exp','IN'.$subQuery)->select();


        //使用闭包  （有问题）
//        $result = Db::name('one')->where('id','in',function($query){
//            $query->name('two')->field('two')->where('gender','男');
//        })->select();
       //return json($result);


        //原生查询
        //1 使用query()方法  进行原生Sql查询 ，适用于读取操作。Sql错误返回false
        //Db::query('select * from tp_user');
        //2 使用execture方法  进行原生SQL 更新写入等 ，Sql错误返回false
        Db::execute('update tp_user set username="孙悟空" where id= 29');
    }
}